﻿Imports System.Resources
Imports System.Threading
Imports Biz
Imports BLL
Imports DevComponents.DotNetBar


Public Class ctrlNuevoUsuario

    Private _llamador As frmMainMetro
    Private _bAlta As Boolean
    Private _oUsuario As cUsuario
    Private _RM As ResourceManager


    Public Sub SetIdioma()

        _RM = New ResourceManager("UI.Idiomas", System.Reflection.Assembly.GetExecutingAssembly)

        btnAceptar.Text = _RM.GetString("btnAceptar")
        btnCancelar.Text = _RM.GetString("btnCancelar")

    End Sub

    Public Property Llamador() As frmMainMetro
        Get
            Return _llamador
        End Get
        Set(value As frmMainMetro)
            _llamador = value
        End Set
    End Property

    Private Sub btnCancelar_Click(sender As Object, e As EventArgs) Handles btnCancelar.Click
        _llamador.CloseModalPanel(Me, DevComponents.DotNetBar.Controls.eSlideSide.Left)
    End Sub

    Public Sub CargarComboIdioma()
        Dim oIdioma As cIdioma
        Dim colObjetos As Collection
        Dim cmbItem As ComboBoxItem


        _RM = New ResourceManager("UI.Idiomas", System.Reflection.Assembly.GetExecutingAssembly)

        cmbIdioma.BeginUpdate()

        cmbIdioma.Items.Clear()

        cmbItem = New ComboBoxItem

        cmbItem.Tag = ""
        cmbItem.Text = _RM.GetString("strComboSeleccioneItem")

        cmbIdioma.Items.Add(cmbItem)

        Try
            colObjetos = GestorIdioma.Instance.Consultar

            If Not colObjetos Is Nothing Then

                For Each oIdioma In colObjetos

                    cmbItem = New ComboBoxItem

                    cmbItem.Tag = oIdioma.Idi_Codigo
                    cmbItem.Text = oIdioma.Idi_Nombre

                    cmbIdioma.Items.Add(cmbItem)
                Next
            End If

            cmbIdioma.SelectedIndex = 0

        Catch ex As Excepciones.IdiomaFalloConsultar
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

        cmbIdioma.EndUpdate()

    End Sub

    Private Function ValidarForm() As Boolean
        Dim bValido As Boolean = True

        Dim oAux As cPoliticas_Seguridad


        Try
            oAux = GestorPoliticas_Seguridad.Instance.Buscar()

        Catch ex As Excepciones.Politicas_SeguridadFalloBuscar
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try



        If txtLegajo.Text.Trim = "" Then bValido = False
        If txtNombre.Text.Trim = "" Then bValido = False
        If txtApellido.Text.Trim = "" Then bValido = False
        If cmbIdioma.SelectedItem Is Nothing Then bValido = False
        If txtContraseñaInicial.Text.Trim = "" Then bValido = False

        If bValido = False Then
            lblMensajes.Text = "Complete todos los datos requeridos..."
        End If

        If bValido Then
            If txtContraseñaInicial.Text.Length < oAux.Pwd_Char_Min Then
                lblMensajes.Text = "La contraseña ingresada no contiene la cantidad mínima de caracteres"
            End If
        End If

        If bValido Then
            If txtContraseñaInicial.Text.Length > oAux.Pwd_Char_Max Then
                lblMensajes.Text = "La contraseña ingresada supera la cantidad máxima de caracteres"
            End If
        End If

        ValidarForm = bValido

    End Function

    Private Sub txtLegajo_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtLegajo.KeyPress
        e.Handled = Not IsNumeric(e.KeyChar) And Not Char.IsControl(e.KeyChar)
    End Sub


    Public Sub MostrarParaAlta()

        _bAlta = True

        lblTituloForm.Text = "Nuevo usuario"
        lblMensajes.Text = ""

        _oUsuario = Nothing

        LlenarForm(Nothing)

        txtLegajo.Focus()

    End Sub

    Public Sub MostrarParaEdicion(oUsuario As cUsuario)

        _bAlta = False

        lblTituloForm.Text = "Editar usuario"
        lblMensajes.Text = ""

        _oUsuario = oUsuario

        LlenarForm(oUsuario)

        txtNombre.Focus()

    End Sub

    Private Sub LlenarForm(oAux As cUsuario)

        If Not oAux Is Nothing Then
            txtLegajo.Text = oAux.Usu_Legajo
            txtNombre.Text = oAux.Usu_Nombre
            txtApellido.Text = oAux.Usu_Apellido
            txtContraseñaInicial.Text = oAux.PasswordActual.Pwd_Password
            PosicionarCombo(cmbIdioma, oAux.Idioma.Idi_Codigo)

        Else
            txtLegajo.Text = ""
            txtNombre.Text = ""
            txtApellido.Text = ""
            txtContraseñaInicial.Text = ""
            cmbIdioma.SelectedIndex = 0
        End If

    End Sub

    Private Sub PosicionarCombo(cmbAux As Object, sTag As String)
        Dim cmbItem As DevComponents.DotNetBar.ComboBoxItem

        If cmbAux.Items.Count > 1 Then
            For Each cmbItem In cmbIdioma.Items
                If cmbItem.Tag = sTag Then
                    cmbAux.SelectedItem = cmbItem
                End If
            Next
        End If

    End Sub

    Private Sub btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
        Dim oAux As cUsuario
        Dim oAuxPwd As cPassword
        Dim cmbItem As DevComponents.DotNetBar.ComboBoxItem


        If ValidarForm() Then
            If _bAlta Then
                oAux = New cUsuario
                oAux.Usu_Legajo = txtLegajo.Text
                oAux.Usu_Nombre = txtNombre.Text
                oAux.Usu_Apellido = txtApellido.Text
                cmbItem = cmbIdioma.SelectedItem
                oAux.Idioma.Idi_Codigo = Utils.Convert.ToInt16(cmbItem.Tag)

                oAuxPwd = New cPassword
                oAuxPwd.Usu_Legajo = oAux.Usu_Legajo
                oAuxPwd.Pwd_Password = Utils.Encriptador.Encriptar(txtContraseñaInicial.Text)

                Try
                    GestorUsuario.Instance.Ingresar(oAux)
                    GestorPassword.Instance.Ingresar(oAuxPwd)

                    GestorBitacora.Instance.Loguear(New cBitacora_Usuario(AppCurrentState.UsuarioLogueado.Usu_Legajo, Utils.Enumeradores.Bitacora.SegUsuarioAlta))

                Catch ex As Excepciones.UsuarioFalloAlta
                    Main.ManejarExcepcion(ex)
                Catch ex As Excepciones.PasswordFalloAlta
                    Main.ManejarExcepcion(ex)
                Catch ex As Exception
                    Main.ManejarExcepcion(ex)
                End Try
            Else
                oAux = New cUsuario
                oAux.Usu_Legajo = txtLegajo.Text
                oAux.Usu_Nombre = txtNombre.Text
                oAux.Usu_Apellido = txtApellido.Text
                cmbItem = cmbIdioma.SelectedItem
                oAux.Idioma.Idi_Codigo = Utils.Convert.ToInt16(cmbItem.Tag)

                Try
                    GestorUsuario.Instance.Editar(oAux)
                    GestorBitacora.Instance.Loguear(New cBitacora_Usuario(AppCurrentState.UsuarioLogueado.Usu_Legajo, Utils.Enumeradores.Bitacora.SegUsuarioModificacion))

                Catch ex As Excepciones.UsuarioFalloEditar
                    Main.ManejarExcepcion(ex)
                Catch ex As Exception
                    Main.ManejarExcepcion(ex)
                End Try

            End If

            _llamador.CloseModalPanel(Me, DevComponents.DotNetBar.Controls.eSlideSide.Left)
            _llamador.RefrescarGrillas()
        End If

    End Sub

End Class
